package Thread;

/**
 * 1.Synchronized介绍：
 * 2.Synchronized和reentrantLock区别：
 *       1.原始构成：
 *             Synchronized 是关键字JVM层面的，monitorenter(底层通过monitor对象来实现，wait/notify 等方法也依赖于monitor对象，至于在同步代码块中才能调用wait/notify等方法唤醒
 *             Lock  （java.util.concurrent.locks.Lock）api层面的锁
 *
 *      2.使用方法：
 *           synchronized不需要手动去释放锁，当代码执行完毕后系统自动会让线程释放对锁的占用
 *           ReentrantLock:需要手动去释放锁，如果没有释放，可能导致死锁，需要lock /unlock 配合try/finally语句来完成
 *
 *      3.等待是否中断：
 *           synchronized不可中断，除非抛出异常或者执行完毕正常退出
 *           ReentantLock:可中断，1.设置超时方法tryLock(Long timeout,TimeUnit unit)
 *                               2.lockInterruptibly()代码块中，调用interrupt（）方法
 *     4.加锁是否公平：
 *           synchronized非公平
 *           reentrantLock:两者都可以
 *
 *     5.绑定多个condition
 *           sychronized  没有
 *           ReentrantLock 用来实现分组唤醒，
 */
public class Synchronized_Example {
}
